#include<iostream>
#include<cstring>
#include<string>
using namespace std;

string* Split(string I,int& sn)
{
	string* t;
	int si = 0, ipos = 0;
	int iposS = 0, iposE = 0;

	while (true) {
		ipos = I.find(',', ipos);
		if (ipos == -1) break;
		sn++;
		ipos++;
	}

	t = new string[sn + 1];



	while (true) {
		iposE = I.find(',', iposS);
		if (iposE == -1) break;
		t[si] = I.substr(iposS, iposE - iposS);
		si++;
		iposS = iposE + 2;
	}
	t[si] = I.substr(iposS);
	return t;
}
void swapT(string* t, int IS, int j, int& sn, string temp)
{
	int i;
	if (t[j].size() <= 2 || t[IS].size() <= 2)
	{
		for (i = IS; i < sn; i++)
		{
			if (t[j].size() <= 2)
			{
				t[i] = t[i + 1];
			}
			else
			{
				t[j] = temp;
				return;
			}
		}
	}
	else
	{
		for (i = IS; i < sn-1; i++)
		{
			if (i < j - 1)
			{
				t[i] = t[i + 1];
			}
			else if (i == j - 1) t[i] = t[i + 2];
			else t[i] = t[i + 2];
		}
		sn--;
	}
	t[i] = temp;
}
void MergeT(string *t,int sn)
{
	string temp1,temp2;
	int flag1,flag2;
	for (int i = 0; i < sn+1; i++)
	{
		for (int j = 0; j < t[i].size(); j++)
		{
			if (t[i][j] == '~')
			{
				temp1 = t[i].substr(j, 2);
				temp2 = t[i].substr(j+1, 1);
			}
			else if (t[i][j] != '|')
			{
				temp1 = t[i].substr(j, 1);
				temp2 = "~" + t[i].substr(j, 1);
			}
			else continue;
			flag1 = t[i].find(temp1, j+2);
			flag2 = t[i].find(temp2, j+2);
			if (flag1 != -1)
			{
				t[i] = t[i].substr(0,j)+t[i].substr(flag1);
			}
			if (flag2 != -1) t[i] = 1;
		}
	}
}
string* Iference(string* t, int &sn)  {
	int IS, IE;
	int IPS{};
	int i;
	string p;

	while (true) {
		IS = 0;
		IE = IS + 1;
		for (i = 0; i < t[IS].size(); i++)
		{
			int j;
			if (t[IS][i] == '~') {
				p = t[IS].substr(i+1,1);
				i++;
			}
			else if (t[IS][i] != '|') p = "~"+t[IS].substr(i, 1);
			else continue;
			for (j = IE; j < sn + 1; j++)
			{
				IPS = t[j].find(p);
				if (IPS != -1)
				{
					if (IPS == 0) break;
					else if (t[j][IPS - 1] != '~') break;
					else
					{
						IPS = -1;
						continue;
					}
				}
			}
			string temp;
			if (IPS == 0)
			{
				if (t[IS].size() > 2)
				{
					if (i <= 1)
					{
						if (t[j][IPS] == '~')
						{
							if (IPS + 3 < t[j].size())temp = t[IS].substr(i + 2) + "|" + t[j].substr(IPS + 3);
							else temp = t[IS].substr(i + 2);
						}
						else
						{
							if (IPS + 2 < t[j].size())temp = t[IS].substr(i + 2) + "|" + t[j].substr(IPS + 2);
							else temp = t[IS].substr(i + 2);
						}
					}
					else
					{
						if (t[j][IPS] == '~')
						{
							if (IPS + 3 < t[j].size() && i + 1 < t[IS].size())temp = t[IS].substr(0, i - 1) +t[IS].substr(i+1)+ "|" + t[j].substr(IPS + 3);
							else if (i + 1 < t[IS].size()) temp = t[IS].substr(0, i - 1) + t[IS].substr(i + 1);
							else temp = t[IS].substr(0, i - 1);
						}
						else
						{
							if (IPS + 2 < t[j].size())temp = t[IS].substr(0, i - 2) + "|" + t[j].substr(IPS + 2);
							else temp = t[IS].substr(0, i - 2);
						}
					}
				}
				else
				{
					if (t[j][IPS] == '~')
					{
						if (IPS + 3 < t[j].size()) temp = t[j].substr(IPS + 3);
						else temp = "";
					}
					else
					{
						if (IPS + 2 < t[j].size())temp = t[j].substr(IPS + 2);
						else temp = "";
					}
				}
				swapT(t, IS, j, sn,temp);

				//for (int i = 0; i < sn+1; i++) cout << t[i] << " ";
				//cout << endl;
				break;
			}
			else if(IPS>0)
			{
				if (t[IS].size() > 2)
				{
					if (i <= 1)
					{
						if (t[j][IPS] == '~')
						{
							if (IPS + 3 < t[j].size())temp = t[IS].substr(i + 2) + "|" + t[j].substr(0, IPS - 1) + t[j].substr(IPS + 2);
							else temp = t[IS].substr(i + 2) + "|" + t[j].substr(0, IPS - 1);
						}
						else
						{
							if (IPS + 2 < t[j].size())temp = t[IS].substr(i + 2) + "|" + t[j].substr(0, IPS - 1) + t[j].substr(IPS + 2);
							else temp = t[IS].substr(i + 2) + "|" + t[j].substr(0, IPS - 1);
						}
					}
					else
					{
						if (t[j][IPS] == '~')
						{
							if (IPS + 3 < t[j].size())temp = t[IS].substr(0, i - 1) + "|" + t[j].substr(0, IPS - 1) + t[j].substr(IPS + 2);
							else temp = t[IS].substr(0, i - 1) + "|" + t[j].substr(0, IPS - 1);
						}
						else
						{
							if (IPS + 2 < t[j].size())temp = t[IS].substr(0, i - 1) + "|" + t[j].substr(0, IPS - 1) + t[j].substr(IPS + 2);
							else temp = t[IS].substr(0, i - 1) + "|" + t[j].substr(0, IPS - 1);
						}
					}
				}
				else
				{
					if (IPS + 3 < t[j].size())temp = t[j].substr(0, IPS - 1) + t[j].substr(IPS + 2);
					else temp = t[j].substr(0, IPS - 1);
				}
				swapT(t, IS, j, sn, temp);
				/*for (int i = 0; i < sn; i++) cout << t[i] <<" ";
				cout << endl;*/
				break;
			}
			else
			{
				if (i == t[IS].size() - 1)
				{
					IS++;
					IE = IS + 1;
					i = -1;
				}
				if (IS == sn) break;
			}	
		}
		if (IPS==-1||sn==0) break;
	}
	MergeT(t, sn);
	return t;
}
void ComIO(string *tI,string *tO,int sn,int sm)
{
	int flag=0;
	string temp1,temp2;
	for (int i = 0; i < sm + 1; i++)
	{
		flag = 0;
		//temp1 = tO[i];
		if (tO[i][0] == '~') temp2 = tO[i].substr(1, 1);
		else temp2 = "~" + tO[i];
		for (int j = 0; j < sn + 1; j++)
		{
			if (temp2 == tI[j])
			{
				flag = 1;
				break;
			}
		}
		if (flag == 1) continue;
		else
		{
			cout << "FALSE" << endl;
			return;
		}
		
	}
	if(flag==1) cout << "TRUE" << endl;
	else cout << "FALSE" << endl;
}
int main() {

	string I, O;
	string* tI=NULL, * tO=NULL;
	int sn = 0, sm = 0;

	getline(cin, I);
	getline(cin, O);
	
	tI = Split(I,sn);
	tO = Split(O,sm);

	for (int i = 0; i < sn; i++)
	{
		for (int j = i; j < sn + 1; j++)
		{
			if (tI[i].size() > tI[j].size())
			{
				string temp;
				temp = tI[i];
				tI[i] = tI[j];
				tI[j] = temp;
			}
		}
	}
	tI = Iference(tI, sn);
	ComIO(tI, tO, sn, sm);
	return 0;
}
